package com.itheima.d5_arrays;

import java.util.Arrays;
import java.util.Comparator;

/**
 * 这126集比较抽象，没讲这个sort是怎么调用重写过的compareTo方法，也没讲是怎么调用的Comparator比较器接口的匿名内部类对象的方法
 *
 * 如果数组中存储的是对象，如何进行排序
 * 方法一：让该对象的类实现Comparable(比较规则)接口，然后重写compareTo方法，自己来制定比较规则。
 *
 * 方法二：使用下面这个sort方法，创建Comparator比较器接口的匿名内部类对象，然后自己制定比较规则。
 *  public static <T> void sort(T[] arr, Comparator<? super T> c) 对数组进行排序(支持自定义排序规则）
 *
 */
public class ArraysTest2 {
    public static void main(String[] args) {
        // 目标：掌握如何对数组中的对象进行排序。
        Student[] students = new Student[4];
        students[0] = new Student("蜘蛛精", 169.5, 23);
        students[1] = new Student("紫霞", 163.8, 26);
        students[2] = new Student("紫霞", 163.8, 26);
        students[3] = new Student("至尊宝", 167.5, 24);

    /*
        // 方法1、该对象的类实现Comparable(比较规则)接口，然后重写compareTo方法，public static void sort(类型[] arr)：对数组进行排序。
        Arrays.sort(students);
        System.out.println(Arrays.toString(students));
        */

        // 方法2、public static <T> void sort(T[] arr, Comparator<? super T> c)
        // 参数一：需要排序的数组
        // 参数二：Comparator比较器对象（用来制定对象的比较规则），Comparator是接口没有对象，所以要用匿名内部类
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                // 制定比较规则了：左边对象 o1   右边对象 o2
                // 约定1：认为左边对象 大于 右边对象 请您返回正整数
                // 约定2：认为左边对象 小于 右边对象 请您返回负整数
                // 约定3：认为左边对象 等于 右边对象 请您一定返回0

//                if(o1.getHeight() > o2.getHeight()){
//                    return 1;
//                }else if(o1.getHeight() < o2.getHeight()){
//                    return -1;
//                }
//                return 0; // 升序
                 return Double.compare(o1.getHeight(), o2.getHeight()); // 升序
                // return Double.compare(o2.getHeight(), o1.getHeight()); // 降序
            }
        });
        System.out.println(Arrays.toString(students));

     /*   //自己写一遍
        Arrays.sort(students, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                //按照身高进行排序
             *//*   if(o1.getHeight()>o2.getHeight()){
                    return 1;
                }else if (o1.getHeight()<o2.getHeight()){
                    return -1;
                }
                return 0;*//*
                //上面的升序代码可以简化
                return Double.compare(o1.getHeight(),o2.getHeight());
            }
        });
        System.out.println(Arrays.toString(students));*/

    }
}
